REST API는 고정된 엔드포인트를 통해 데이터를 제공하는 방식으로, 클라이언트가 원하는 데이터 구조에 맞춰 요청하기 어려운 경우가 많습니다. 이로 인해 **언터페징(Under-fetching)**과 오버페징(Over-fetching) 문제가 발생할 수 있습니다.
언더 페칭은 하나의 요청에서 필요한 데이터를 충분히 가져오지 못하는 경우를 의미합니다. 이로 인해 클라이언트는 원하는 정보를 얻기 위해 여러 번 요청을 보내야 하는 문제를 겪습니다.
예를 들어, 사용자의 기본 정보와 작성한 게시글을 가져오려면 REST API에서는 다음과 같이 여러 번 요청해야 합니다.
GET /users/1
GET /users/1/posts
이처럼 REST API에서는 데이터를 여러 엔드포인트에서 나누어 제공하기 때문에 클라이언트가 원하는 데이터 구조를 한 번에 가져오기 어렵습니다.
오버 페칭은 요청 시 불필요한 데이터를 과도하게 가져오는 현상을 의미합니다. 이는 네트워크 트래픽 증가와 성능 저하를 초래할 수 있습니다.
예를 들어, 클라이언트가 사용자의 **이름(name)**만 필요하다고 가정해봅시다. 하지만 REST API의 엔드포인트는 일반적으로 고정된 데이터를 반환하므로, 불필요한 데이터까지 함께 전달됩니다.
GET /users/1
{
"id": 1,
"name": "Alice",
"email": "alice@example.com",
"address": {
"city": "Seoul",
"street": "123 Main St"
}
}
GraphQL은 클라이언트가 원하는 데이터만 선택적으로 요청할 수 있도록 설계되었습니다. 이를 통해 REST API의 언더페칭과 오버페칭 문제를 효과적으로 해결할 수 있습니다.
GraphQL에서는 한 번의 요청으로 연관된 데이터를 가져올 수 있습니다.
query {
user(id: "1") {
id
name
posts {
title
content
}
}
}
✅ REST API와 달리, 별도의 추가 요청 없이 사용자의 기본 정보와 게시글 데이터를 한 번에 가져올 수 있습니다.
GraphQL에서는 정확히 필요한 필드만 요청할 수 있습니다.
query {
user(id: "1") {
name
}
}
✅ 불필요한 데이터(email, address 등)를 제외하고, 이름(name) 만 가져올 수 있습니다.
REST API는 데이터 제공 방식의 한계로 인해 언더페칭과 오버페칭 문제가 발생할 수 있습니다. GraphQL을 활용하면 필요한 데이터를 한 번의 요청으로 가져오고, 불필요한 데이터를 최소화할 수 있어 성능 최적화가 가능합니다.
✅ GraphQL을 도입할 때는 클라이언트에서 필요한 데이터만 요청하는지, 한 번의 요청으로 충분한 데이터를 가져오는지를 고려하여 최적화된 API를 설계하세요!